package com.diaohaiwen.framework.authority;

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject;
import com.diaohaiwen.common.obj.cache.RequestCache;
import com.diaohaiwen.common.obj.login.LoginUser;
import com.diaohaiwen.common.obj.login.LoginVo;

import java.util.Map;

import static cn.dev33.satoken.stp.StpUtil.*;

public class AuthorityUtil {
    /**
     * 用户登录接口
     *
     * @param user 登录用户信息
     */
    public static LoginVo login(LoginUser user) {
        StpUtil.login(user.getLoginId());
        refreshDataMap(user);
        final String token = getTokenValueByLoginId(user.getLoginId());
        return new LoginVo(token, getTokenName(), user.getLoginId());
    }

    /**
     * 获取当前登录用户的身份信息
     *
     * @return 用户信息
     */
    public static LoginUser getLoginUser() {
        if (RequestCache.isLogin()) {
            return RequestCache.getLoginUser();
        }
        return new JSONObject(getSession().getDataMap()).toJavaObject(LoginUser.class);
    }

    /**
     * 根据user-ID登录用户的身份信息
     *
     * @return 用户信息
     */
    public static LoginUser getUserInfo(String userId) {
        return new JSONObject(getSessionByLoginId(userId).getDataMap()).toJavaObject(LoginUser.class);
    }

    /**
     * 根据token获取登录用户ID
     *
     * @param authority token
     * @return 用户Id
     */
    public static String getLoginId(String authority) {
        return Convert.toStr(getLoginIdByToken(authority));
    }

    public static String getLoginId() {
        return StpUtil.getLoginId().toString();
    }

    /**
     * 用户名称
     */
    public static String getUserName(String userId) {
        return getUserInfo(userId).getName();
    }


    /**
     * 用户所属组织机构
     */
    public static Long getDepartmentId(String userId) {
        return getUserInfo(userId).getDepartmentId();
    }


    /**
     * 用户手机
     */
    public static String getMobile(String userId) {
        return getUserInfo(userId).getMobile();
    }

    /**
     * 用户邮箱
     */
    public static String getEmail(String userId) {
        return getUserInfo(userId).getEmail();
    }

    /**
     * 刷新用户信息
     *
     * @param user 登录用户信息
     */
    public static void refreshDataMap(LoginUser user) {
        SaSession session = getSessionByLoginId(user.getLoginId());
        refreshDataMap(user, session);
    }

    /**
     * 刷新用户信息
     *
     * @param user 登录用户信息
     */
    public static void refreshDataMap(LoginUser user, SaSession session) {
        Map<String, Object> bean = BeanUtil.beanToMap(user, false, true);
        session.refreshDataMap(bean);
    }


}
